﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Twodi.Input.Events;
using Twodi.Input;
using Twodi.Arguments;

namespace Twodi.Interfaces
{
    /// <summary>
    /// Define um componente com eventos de mouse.
    /// </summary
    public interface IMouseEvent
    {

        /// <summary>
        /// Evento invocado quando ocorrer click no componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseClick;

        /// <summary>
        /// Evento invocado quando ocorrer o pressiona de qualquer botão do mouse no componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseDown;

        /// <summary>
        /// Evento invocado quando ocorrer o soltar de qualquer botão do mouse no componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseUp;

        /// <summary>
        /// Evento invocado quando ocorrer movimento do mouse no componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseMove;

        /// <summary>
        /// Evento invocado quando mouse ficar sobre o componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseOut;

        /// <summary>
        /// Evento invocado quando mouse ficar fora do componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseOver;

        /// <summary>
        /// Evento invocado quando mouse mover enquanto é pressionado qualquer botão sobre o componente.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseDrag;

        /// <summary>
        /// Evento invocado quando todos botões do mouse são soltos após um evento de drag.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseDrop;

        /// <summary>
        /// Evento invocado quando mouse permanece sobre o componente após um MouseOver.
        /// </summary>
        event InputEventHandler<InputEventArgs<MouseInput>> MouseHover;
    }
}
